﻿using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Collections.Generic;
using System.Linq.Expressions;
using System.Collections;
using System.Transactions;

#region Utilizador
namespace Distrackting.DataLayer
{
    public partial class Utilizador
    {
        public void setUtilizador(Utilizador p)
        {
            this.cod_utilizador = p.cod_utilizador;
            this.nome = p.nome;
            this.email=p.email;
            this.password = p.password;
            this.cod_nivel = p.cod_nivel;
            this.aprovado = p.aprovado;
            this.bloqueado = p.bloqueado;
            this.data_nascimento = p.data_nascimento;
            this.sexo = p.sexo;
            this.numero_telemovel = p.numero_telemovel;
            this.cod_localidade = p.cod_localidade;
            this.data_ultimo_login = p.data_ultimo_login;
        }
    }
}
#endregion


#region dataUtilizador
namespace Distrackting.DataLayer
{
    public class dataUtilizador
    {
        #region Methods

        public static Guid createUtilizador(Utilizador u)
        {
                try
                {
                  dbDataDataContext dbData = new dbDataDataContext();
                  u.cod_utilizador = System.Guid.NewGuid();
                  dbData.Utilizadors.InsertOnSubmit(u);
                    dbData.SubmitChanges();

                }
                catch (Exception e)
                {
                    throw e;
                }
                return u.cod_utilizador;
            }
        
        public static Utilizador getUtilizador(Guid guid)
        {
            try
            {
                if (guid == null) return null;
                dbDataDataContext dbData = new dbDataDataContext();

                Utilizador pnt = (from p in dbData.Utilizadors
                                  where p.cod_utilizador == guid
                             select p).FirstOrDefault();
                return pnt;
            }
            catch (Exception e)
            {
                throw e;
            }
        }

        public static Boolean changeUtilizador(Utilizador p)
        {
            try
            {
                if (p == null)
                    return false;
                else
                {
                    dbDataDataContext dbData = new dbDataDataContext();
                    Utilizador res = dbData.Utilizadors.FirstOrDefault(pnt => pnt.cod_utilizador == p.cod_utilizador);
                    if (res == null) return false;
                    else
                    {
                        res.setUtilizador(p);
                        dbData.SubmitChanges();
                        return true;
                    }
                }
            }
            catch (Exception e)
            {
                throw e;
            }
        }

        public static IQueryable<Utilizador> getUtilizadores()
        {
            try
            {
                dbDataDataContext dbData = new dbDataDataContext();
                return dbData.Utilizadors;
            }
            catch (Exception e)
            {
                throw e;
            }
        }

        public static IQueryable<Utilizador> getUtilizadores(Expression<Func<Utilizador, bool>> whereClause)
        {
            try
            {
                dbDataDataContext dbData = new dbDataDataContext();
                return dbData.Utilizadors.Where(whereClause);
            }
            catch (Exception e)
            {
                throw e;
            }
        }

        public static Boolean deleteUtilizador(Utilizador p)
        {
            try
            {
                dbDataDataContext dbData = new dbDataDataContext();
                if (dbData.Utilizadors.Contains(p))
                {
                    Utilizador res = (from pnt in dbData.Utilizadors
                                      where pnt.cod_utilizador == p.cod_utilizador
                                 select pnt).FirstOrDefault();
                    if (res == null)
                        return false;
                    else
                    {
                        dbData.Utilizadors.DeleteOnSubmit(p);
                        dbData.SubmitChanges();
                        return true;
                    }
                }
                else return false;
            }
            catch (Exception e)
            {
                throw e;
            }
        }

        public static int contarUtilizadores()
        {
            dbDataDataContext dbData = new dbDataDataContext();
            try
            {
                return dbData.Utilizadors.Count();
            }
            catch (Exception e)
            {
                throw e;
            }
        }
        #endregion
    }
}
#endregion